# 基础
# 假设有一个初始字符串 `s = "Hello, Python world!"`，进行下面的操作：

s = "Hello, Python world!"
#  1. 字符串长度计算
len(s)
#  2. 计算字符串中"o"字符的个数
s.count('o')
#  3. 将字符串转换为大写
s = s.upper()
#  4. 将字符串转换为小写
s = s.lower()
#  5. 查找"Python"在字符串中的位置
s.find('Python')
#  6. 替换字符串中的"world"为"universe"
s = s.replace('world', 'universe')
#  7. 检查字符串是否以"Hello"开始
s.startswith('Hello')
#  8. 检查字符串是否以"!"结尾
s.endswith('!')
#  9. 以","为分隔符，拆分字符串
s.split(',')
#  10. 去除字符串首尾的"!"
s = s[:len(s) - 1]
#  11. 字符串反转
# s=s[::-1]
#  12. 字符串切片，获取"Python"
s[7:13]
#  13. 将字符串s中的"Hello,"删除
s = s[5:]
#  14. 拼接两个字符串 "Hello," 和 "World!"
s += 'Hello' + 'World'
#  15. 使用f-string合并字符串和数字2021
s = f'{s}2021'
#  16. 找出'a'第一次出现的位置
s.find('a')
#  17. 找出'e'最后一次出现的位置
s.rfind('e')
#  18. 计算字符串中空格的数量
s.count(' ')
#  19. 使用循环遍历字符串中的每个字符
for i in s:
    pass
#  20. 将字符串转为"列表"形式，每个字符为一个列表元素
list1 = list(s)
#  21. 字符串排序（提示：先转换为列表）
list1.sort()
s = "".join(list1)
#  22. 判断字符串是否为数字
s.isdigit()
#  23. 将列表 `['Hello,', 'Python', 'World!']` 使用空格连接为一个字符串
s = " ".join(['Hello,', 'Python', 'World!'])
#  24. 使用%操作符格式化字符串，将数字100插入到"Number: "后面
s = "Number:%d" % 100
#  25. 检查字符串是否全部为小写字母
s.islower()
#  26. 检查字符串是否全部为大写字母
s.isupper()
#  27. 将数字列表 `[1, 2, 3]` 转换成字符串，元素之间用`-`连接
s = "-".join(map(str, [1, 2, 3]))
#  28. 找出字符串中所有的"o"的位置
list1 = []
for i in range(len(s)):
    if 'o' == s[i]:
        list1.append(i)
#  29. 替换字符串中的第一个"o"为"O"
s = "Hello, Python world!"
list1 = list(s)
list1[list1.index('o')] = '0'
s = "".join(list1)
#  30. 字符串插入操作，向字符串指定位置插入子字符串"amazing "
list1 = list(s)
list1.insert(1, "amazing ")
s = "".join(list1)

# 进阶
# 给定字符串
# s = "Python is great!"
s = "Python is great!"
# 完成以下题目
# 1. 字符串反转: 给定字符串`s = "Python is great!"`，不使用任何内置函数，编写代码以反转字符串。
# s=s[::-1]
# 2. 字符计数: 对于同一个字符串`s`，计算字符 `t'` 在其中出现的次数。
s.count('t')
# 3. 替换字符: 把字符串`s` 中的所有空格替换成下划线 ``。
s.replace(" ", "_")
# 4. 检查回文: 检查字符串`s2 = "A man, a plan, a canal, Panama!"` 在忽略大小写、标点和空格的情况下是否为回文字符串。
s2 = "A man, a plan, a canal, Panama!"
s2 = s2.replace(" ", "").replace(",", "").replace("!", "").lower()
count = 0
for i in range(len(s2) // 2):
    if s2[i] != s2[len(s2) - 1 - i]:
        print('不是回文字符串')
    else:
        count += 1
if count == (len(s2) // 2):
    print('是回文字符串')
# 5. 子字符串查找: 在`s` 中查找第一次出现子字符串 `is"` 的位置。
s.find('is')
# 6. 字符串插入: 在`s` 中第一个 `t'` 字符之后插入子字符串`"_inserted"`。
list1 = list(s)
list1.insert(list1.index('t'), "_inserted")
s = ''.join(list1)
# 7. 部分替换: 替换`s` 中第一次出现的 `great"` 为 `awesome"`。
s = s.replace('great', 'awesome', 1)
# 8. 切片与拼接: 将`s` 切分为两部分，其中第一部分包含前半部分的字符，第二部分包含后半部分的字符，然后将这两部分以相反顺序拼接起来。
s = s[10:] + s[:10]
# 9. 创建字符串列表: 使用列表生成式，根据字符串`s` 创建一个列表，其中包含`s` 的每个单词的首字母大写形式。
list1 = s.title().split(" ")


# 10. 字符替换加密: 编写一个函数`encrypt`，使用字典 `a: m, b: n, ... z: l}` 的对应规则加密字符串`s3 = "encryption"`。
def encrypt(s1):
    l = []
    for c in s1:
        if (c >= 'a') & (c <= 'm'):
            l.append(chr(ord(c) + 12))
        elif (c >= 'n') & (c <= 'z'):
            l.append(chr(ord(c) - 12))
        else:
            l.append(c)
    return "".join(l)


s3 = encrypt("encryption")
